唔,先前的代碼還是寫的不夠好,因為是寫死的,那如果我想讓用戶自已輸入想要替換的文字,那要怎麼做呢?
請在Terminal中執行 $python3 sed.py 是真的要刺下去嗎 不是真的要刺下去吧
#!/usr/bin/env python3
# -*- coding:utf-8 -*-
import sys
find_sys = sys.argv[1]
replace_sys = sys.argv[2]
f = open("foo.txt", "r", encoding="utf-8")
f_new = open("foo.bak", "w", encoding="utf-8")
for line in f:
if find_sys in line:
line = line.replace(find_sys, replace_sys)
f_new.write(line)
f.close()
f_new.close()
在執行這代碼前,先砍掉foo.bak
,確認不存在後,再執行上面的代碼,然後觀察一下是不是真的有替換了
那之前在操作文件時,有沒有發現常常有的代碼會寫f.close()
,有的沒有寫,其實這是在操作文件時很容易被忽略,所以現在要介紹一個好物,with語句
,它會主動幫我們關閉文件,並釋放文件資源,所以可以寫成下面的代碼,就不需要在額外寫f.close()
了,這樣就輕鬆一點了
with opne("file.txt", "r", encoding="utf-8") as f:
...
所以上面的代碼還可以再優化
#!/usr/bin/env python3
# -*- coding:utf-8 -*-
import sys
find_sys = sys.argv[1]
replace_sys = sys.argv[2]
with open("foo.txt", "r", encoding="utf-8") as f, \
open("foo.bak", "w", encoding="utf-8") as f_new:
for line in f:
if find_sys in line:
line = line.replace(find_sys, replace_sys)
f_new.write(line)
同樣在terminal執行上面的代碼,未來可以盡量用with語句
來打開文件
呼,文件操作的部份,大概就這些,文件操作是未來會最常使用的招式,可以好好練熟悉一點